Fuzzy C-Means Clustering applied to Customer Analysis

Author: Amanda Lucas Pereira

ELE2399 Lógica Fuzzy 2021/2

Importing packages

Loading and pre-processing data

Creating/Preprocessing features

Age

Note que a data mais recente de cadastro de um novo consumidor é de Dezembro de 2014. Logo, consideraremos 2015 como referência para o cálculo da idade dos consumidores avaliados.

Pela célula anterior, notamos alguns outliers: registros a consumidores com mais de 100 anos. Esses dados serão desconsiderado na análise.

Customer Time

Tempo de cadastro de um consumidor, considerando como referência a data mais recente de cadastro de um novo.

Total Children

Número de filhos: número de crianças + número de adolescentes.

Education

O algoritmo precisa trabalhar com variáveis numéricas ao invés de categóricas. A função get_educational_group realiza o encoding das categorias nominais do atributo "Education".

Marital Status / Sharing_Home

As categorias serão combinadas em uma nova variável "Sharing_Home": 0 , que corresponde a Marital_Status = ['Alone', 'Absurd', 'YOLO', 'Single', 'Divorced', 'Widow']; 1 = ['Together', 'Married'].

Os dados precisam ser transformados em categorias númericas através do processo de enconding. A função get_marital_group realiza esse processo, atribuindo um número a cada categoria original do atributo.

Total Spent

Income

Do histograma gerado, aparentemente há outliers nessa série. Vamos remove-los.

Dropping some columns

Visualizing relationships between variables

Dos gráficos acima, a variável "Total_Children" parece 'clusterizar' os pontos nos gráficos que relacionam Income e Total_Spent. Educação e Sharing_Home não parecem ter esse efeito.

Analizando a matriz de correlações, parece haver uma relação entre as variáveis:

Final Dataframe

Normalizing features

Shuffle Dataframe

Split Train/Test Data

Criando uma coluna no dataframe para representar se a amostra pertence ao grupo de treino ou de teste. O grupo de treino será usado para definir os melhores parâmetros para a clusterização; o grupo de teste será utilizado para avaliar a melhor solução encontrada após a etapa de treinamento.

Fazendo o split

As colunas do dataframe devem ser normalizadas antes de prosseguir para os testes com o FCM. Para isso, será utilizado o StandardScaler(). O fit do scaler deve ser realizado considerando apenas os dados de treinamento. O scaler gerado deve ser reutilizado para normalização dos dados para teste.

Os dados de teste serão normalizados com as mesmas estatísticas descritivas dos dados de treino.

Fuzzy C Means: Clustering

Baseline: Raw data

PCA + FCM

PCA: 2 principal components (p = 2)

PCA: 3 principal components (p = 3)

PCA: Using 5 principal components (p = 5)

Comparing PC and PE for different values of principal components

Os melhores valores de PC e PEC foram obtidos com os dados originais. Para gerar uma comparação com o baseline, foi escolhido o método que utiliza 3 componentes principais, por questão de facilitar a visualização e não apresentar resultado tão inferior quanto o que mais se aproxima do baseline -- p = 5. Analisando as curvas, um bom número de clusters para esse conjunto de dados parece ser c = 2 ou c = 4.

EXPERIMENTO 1: Usando c = 2 (Baseline e PCA, p = 3)

Selecionando os modelos para os quais c = 2:

Aplicando os modelos em todo o conjunto de treinamento.

O primeiro passo é combinar as saídas obtidas com os dados originais.

O agrupamento realizado usando componantes principais parece ter concentrado mais itens em um cluster, quando comparado aos demais do mesmo experimento. Já para os dados originais, a diferença entre o número de itens do menor e maior clusters é menor.

Apesar da diferença notada ao rodar o comando value_counts, os dois experimentos tem resultados parecidos ao se realizar uma comparação visual dos clusters resultantes.

Looking closely at the soft clustering

*** EXPERIMENTO 2: Usando c = 4 (Baseline e PCA, p = 3)

Selecionando os modelos para os quais c = 4:

Aplicando os modelos em todo o conjunto de treinamento (obs.: visualização utilizando apenas as três primeiras componentes):

O primeiro passo é combinar as saídas obtidas com os dados originais.

O agrupamento realizado usando os addos originais concentra muitas amostras no cluster de número 2, com 971 amostras. Para os dados com PCA, o maior cluster apresenta 754 amostra e há um gap menor observado entre ele e os demais conjuntos.

Analisando visualmente os dois gráficos, três clusters sugeridos por ambos experimentos parecem ser parecidos com relação às variáveis analisadas. Porém, nota-se uma diferença relevante entre o cluster de número no experimento com dados originais e o mesmo para o com dados que utiliza PCA. O que utiliza os dados originais agrupa os clientes com maior Income (aprox. maior que 80000) e Total_Spent (aprox. maior que 750) em um grupo diferente. Já para o agrupamento realizado usando dados do PCA, esse grupo não existe, e o algoritmo sugere um grupo de clientes na transição entre os clusters 2 e 3.

Looking closely at the soft clustering

Nota-se maior nebulosidade na partição de dados realizada usando PCA (segundo gráfico). Os clusters gerados com os dados originais apresentam valores mais "crisps": a maioria dos connjuntos parecem ser formados por amostras com valor próximo de 1.0, e uma minoria possui valores de pertinência mais baixos, geralmente em regiões de borda.

"EXTRA": Avaliando a influência do parâmetro m

Usando c = 2, p = 3

Usando c = 4, p = 3

Comparando

Juntando ambos plots:

A escolha do coeficiente fuzzy "m" parece parece influenciar mais o resultado quando se utiliza um maior número de clusters.

K-Means Clustering [c = 4]

Ajuste do K-Means ao conjunto de dados. Utilizando o mesmo número de clusters definido para o FCM.

*** EXPERIMENTO 3: Baseline

*** EXPERIMENTO 4: PCA, p = 3

Comparação: Baseline e PCA

Por inspeção visual, nota-se que a clusterização ficou próxima. O que aconteceu foi uma troca das 'labels' pela função utilizada. Em número de amostras os clusters obtidos são próximos:

Comparação k-Means e Fuzzy C-Means

Baseline

Comparação Visual

Alterando a ordem dos plots para facilitar visualização e comparação dos clusters:

Notamos que há uma certa sobreposição entre os clusters obtidos tanto para o FCM (hard) e o K-Means quando utilizado os dados originais de entrada. Os centros de clusters, após realizado uma correspondência manual entre eles, parecem estar próximos.

Análise dos Clusters Gerados pelo FCM

Os gráficos indicam que será benéfico investigar o caso de lançar campanhas voltadas para o cluster 2, que são os clientes com um salário baixo e um gasto também baixo.

Análise dos Clusters Gerados pelo KM

Analogamente ao que foi indicado pelo FCM, o cluster referente aos clientes com menor salário se refere também aos clientes que menos consomem produtos da empresa. Seria interessante pensar em campanhas para esse público alvo, realizando análises estatísticas mais específicas voltadas para o grupo.

PCA, p = 3

Ao utilizar o PCA, os resultados obtidos para cada método divergem mais.

Análise dos Clusters Gerados pelo FCM + PCA

No experimento com o conjunto de atributos original, o FCM havia indicado apenas 1 cluster com baixo consumo dos produtos da empresa -- refente a clientes com salário de baixo a médio. Com o experimento utilizando dados de PCA, o modelo passa a indicar clusters mais "intuitivos": o cluster 0 abriga os clientes com maiores salários e logo apresenta o maior consumo. O cluster 2, que se posiciona no gráfico de dispersão um pouco abaixo e à esquerda do 0, tem um consumo mediano indicado no box-plot. A maior diferença observada na saída do algoritmo é que para os dados com PCA, o FCM indica um cluster com baixo consumo indicado pelo número 3 de clientes que possuem salário de baixo a médio; e também um outro cluster com salário muito baixo e consumo muito baixo, indicado pelo número 1. Logo, o FCM parece ter se beneficiado da aplicação de PCA no conjunto de dados, resultando em um resultado com grupos mais distintos entre si.

Análise dos Clusters Gerados pelo KM

Para o k-Means, o modelo continua apontando 3 clusters com consumo de médio a alto, e um cluster de consumo inferior -- referente aos clientes com salário de baixo a médio. Porém, com o PCA, o k-Means aglomera mais clientes em seu cluster 0 (aproximadamente metade dos clientes do conjunto de dados). Este conjunto indicado é o de menor consumo quando comparado aos demais, o que é evidenciado ao analisar o box-plot dos clusters. Essa aglomeração maior em um único cluster pode indicar que a realização de uma campanha voltada para este grupo de clientes seja mais eficaz e mais simples de direcionar ao público-alvo do que o investimento em dois grupos distintos proposto pelo FCM com PCA.

Por outro lado, os resultados obtidos com o FCM parece apresentar uma maior granularidade com relação ao perfil do consumidor. O que pode ser avaliado futuramente são os grupos de consumidores segmentados testando diferentes valores do coeficiente nebuloso, como uma forma de ajuste da resposta do modelo à nebulosidade inerente ao conjunto.